# 逐行修复脚本，重点关注错误行
import os
import shutil

# 文件路径
original_file = r'd:\未知\yolo_apply\video_processing\video_processor.py'
backup_file = r'd:\未知\yolo_apply\video_processing\video_processor.py.backup'
temp_file = r'd:\未知\yolo_apply\video_processing\video_processor_fixed.py'

# 确保我们有备份
if os.path.exists(backup_file):
    print(f"使用备份文件: {backup_file}")
    
    # 创建最终备份
    final_backup = original_file + '.final_backup'
    shutil.copy2(backup_file, final_backup)
    print(f"已创建最终备份: {final_backup}")
    
    # 逐行读取并处理文件
    with open(backup_file, 'r', encoding='utf-8', errors='replace') as f_in, \
         open(temp_file, 'w', encoding='utf-8', newline='\n') as f_out:
        
        line_num = 0
        error_region_start = None
        
        for line in f_in:
            line_num += 1
            
            # 清理行中的所有不可见字符，只保留可见字符和必要的空格、换行符
            # 保留必要的空格但移除多余的和可能有问题的字符
            line = ''.join(c for c in line if ord(c) >= 32 or c in '\n\t')
            
            # 检查是否进入问题区域
            if '# 错误率过高时触发警告和恢复' in line:
                error_region_start = line_num
                f_out.write('# 错误率过高时触发警告和恢复\n')
                print(f"发现问题区域开始于第{line_num}行")
                continue  # 跳过这一行的原始内容
            
            # 检查是否在问题区域内
            if error_region_start is not None:
                # 查找问题区域的结束（error_count = 0）
                if 'error_count' in line and '=' in line:
                    # 确保正确的格式
                    f_out.write('    error_count = 0\n')
                    print(f"找到问题区域结束于第{line_num}行，已添加正确的error_count初始化")
                    error_region_start = None
                else:
                    # 跳过问题区域中的其他行
                    continue
                
                # 跳过后续处理
                continue
            
            # 特别处理错误行（max_queue_size）
            if 'max_queue_size' in line and 'self.config.get' in line:
                # 确保正确的格式和缩进
                if line_num == 1851:
                    print(f"正在修复第{line_num}行的max_queue_size赋值")
                    f_out.write('    max_queue_size = self.config.get("max_queue_size", 50)\n')
                    continue
            
            # 对于其他所有行，确保格式正确，特别是缩进
            # 修复常见的格式问题
            if line.strip():
                # 处理可能的缩进问题
                indent_level = len(line) - len(line.lstrip())
                # 使用空格进行缩进，确保没有制表符或混合缩进
                clean_indent = ' ' * ((indent_level + 3) // 4 * 4)  # 四空格缩进
                content = line.strip()
                clean_line = clean_indent + content + '\n'
                f_out.write(clean_line)
            else:
                f_out.write('\n')
    
    print(f"已创建修复后的临时文件: {temp_file}")
    
    # 替换原文件
    os.replace(temp_file, original_file)
    print(f"已用修复后的文件替换原文件")
    print("现在让我们再次尝试编译...")
else:
    print(f"错误: 找不到备份文件 {backup_file}")